FILE* abreArquivo(const char*, char*);
int contaUsuariosNoArquivo(FILE*);
void obtemInfoNovoUsuario (FILE*, int);
void criaNovoUsuario(void);
int validaNomeUsuario (char* , int);

FILE* abreArquivo(const char nomeArquivoComExtensao[], char tipoDeAbertura[])
{
	FILE *arq;
	arq = fopen(nomeArquivoComExtensao, tipoDeAbertura);
	 if(!arq)
	 {
			 printf("Houve um problema ao abrir o arquivo, o programa será encerrado.");
			 getch();
			 exit(1);
	 }
	 return arq;
}
int contaUsuariosNoArquivo(FILE* arq)
{
	 int numeroUsuariosNoArquivo = 0;
	 char linha[MAX_LINHA];
	 
	 while(!feof(arq))
	 {
		fgets(linha, MAX_LINHA, arq);
		if(linha[0]!='\n')
		   numeroUsuariosNoArquivo++;
	 }
	 return numeroUsuariosNoArquivo;	 
}	 

int validaNomeUsuario (char nome[], int comprimentoNome)
{
			int i, erroOcorreu = 0;
			
			if(comprimentoNome>=3)
			 {
				 for(i=0;i<comprimentoNome;i++)
				 {
					 if(nome[i] == ',')
					 {
						 printf("Nome informado invalido. Por favor, nao insira virgulas no nome.\n");
						 erroOcorreu=1;
					 }
				 }
			 }
			 else
			 {
				 if(comprimentoNome==0)
					 printf("Por favor, insira um nome valido.\n");
				 else
					 printf("Seu nome deve conter pelo menos 3 letras.\n");

				 erroOcorreu = 1;
			 }
			 return erroOcorreu;
}

void obtemInfoNovoUsuario (FILE* arq, int numeroUsuariosNoArquivo)
{
		 USUARIO novoUsuario;
		 int erroOcorreu; //erro: 1=ocorreu, 0=não ocorreu
		 int i, comprimentoNome;
		 char categoria;
		 		
	     novoUsuario.codigo = numeroUsuariosNoArquivo+1;
		 
		 printf("\nCADASTRO DE NOVO USUARIO");

		 printf("\n=============================================================");
		 printf("\nSeu cadastro: ");

		 printf("%d", numeroUsuariosNoArquivo+1);

		 printf("\nInforme o seu nome: ");
		 do
		 {
			 fflush(stdin);

			 gets(novoUsuario.nome);
			 comprimentoNome = strlen(novoUsuario.nome);
			 
			 erroOcorreu = validaNomeUsuario (novoUsuario.nome, comprimentoNome);
			 
		 }while(erroOcorreu);

		 printf("Informe sua categoria. (C para cliente ou G para gerente): ");
		 erroOcorreu = 1;
		 do
		 {
			 fflush(stdin);

			 scanf("%c", &categoria);
			 categoria = toupper(categoria);
			 switch(categoria)
			 {
				case 'C':
				{
					 strcpy(novoUsuario.categoria, "cliente");
					 erroOcorreu=0;
					 break;
				}
				case 'G':
				{
					 strcpy(novoUsuario.categoria, "gerente");
					 erroOcorreu = 0;
					 break;
				}
				default:
				{

					 printf("Caractere informado invalido! Informe um caractere valido:");
					 break;
				}
			 }
		  }while(erroOcorreu);
		  
		  arq = abreArquivo(DATABASE_DE_USUARIOS, "a");
		  
		  fprintf(arq,"%c%d%c%s%c%s", '\n', novoUsuario.codigo, ',', novoUsuario.nome, ',', novoUsuario.categoria);
		  fclose(arq);

		  printf("\nCadastro criado com sucesso!");
		  getch();

}
void criaNovoUsuario(){
	 FILE *arq;
	 int numeroUsuariosNoArquivo;
	 char linha[MAX_LINHA];
	 system("cls");
	 
	 arq = abreArquivo(DATABASE_DE_USUARIOS, "r");
	 
	 numeroUsuariosNoArquivo = contaUsuariosNoArquivo(arq);

	 fclose(arq);
	 
	 if(numeroUsuariosNoArquivo < MAX_USUARIOS)
	 {
		 obtemInfoNovoUsuario (arq, numeroUsuariosNoArquivo);
	 }
	 else
	 {
		 printf("Numero maximo de usuarios atingido!");
		 fclose(arq);
		 getch();
	 }
}
